﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using NNS.Net;
using NNS.Utils.Utils;
using Update.Entity;

namespace Update
{
    public partial class frmMain : Form
    {
        private double oldVersion;
        private double newVersion;
        private string path;

        public frmMain()
        {
            InitializeComponent();
            if (File.Exists(Application.StartupPath + "\\update.sys"))
            {
                Entity.dsUpdate ds = new dsUpdate();
                ds.ReadXml(Application.StartupPath + "\\update.sys");
                if (ds.UPDATE.Count > 0)
                {
                    oldVersion = Convert.ToDouble(ds.UPDATE.Rows[0]["OldVersion"]);
                    lblCur.Text = "Phiên bản: " + ds.UPDATE.Rows[0]["OldVersion"].ToString();
                }
            }
            lblMessage.Text = "Đang kiểm tra phiên bản mới...";
            lblNew.Text = "Phiên bản mới: cheking";
            Check();
        }

        void Check()
        {
            FtpClient ftp = new FtpClient("10.81.30.111", "huyen", "huyen");
            ftp.CurrentDirectory = @"/VP_BDT/HoangTam/QLTB/Update";
            if (ftp.FtpFileExists("update.sys"))
            {
                ftp.Download("update.sys", Application.StartupPath + "\\update.info", true);
            }

            if (File.Exists(Application.StartupPath + "\\update.info"))
            {
                Entity.dsUpdate ds = new dsUpdate();
                ds.ReadXml(Application.StartupPath + "\\update.info");
                if (ds.UPDATE.Count > 0)
                {
                    newVersion = Convert.ToDouble(ds.UPDATE.Rows[0]["NewVersion"]);
                    
                    path = ds.UPDATE.Rows[0]["ApplicationPath"].ToString();

                    //lblCur.Text = "Phiên bản: " + ds.UPDATE.Rows[0]["OldVersion"].ToString();
                }
            }

            lblMessage.Text = "";
            lblNew.Text = "Phiên bản mới: " + " is current.";

            if (newVersion>oldVersion)
            {
                lblNew.Text = "Phiên bản mới: " + newVersion + " is Available";
                lblMessage.Text = "Phiên bản mới đã sẵn sàng.";
                btnCheck.Enabled = true;
                btnCheck.Text = "Download";
            }

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            lblMessage.Text = "Đang tải bản cập nhật.";
            btnCheck.Enabled = false;
            btnCheck.Text = "Download";
            FtpClient ftp = new FtpClient("10.81.30.111", "huyen", "huyen");
            ftp.CurrentDirectory = @"/VP_BDT/HoangTam/QLTB/Update/";
            ftp.DownloadProgress += new EventHandler<DownloadPercent>(ftp_DownloadProgress);
            ftp.DownloadCompleted += new System.Net.DownloadDataCompletedEventHandler(ftp_DownloadCompleted);
            if (ftp.FtpFileExists("update.zip"))
            {
                ftp.Download("update.zip", Application.StartupPath + "\\update.zip", true);
            }
            else
            {
                lblMessage.Text = "File cập nhật không tồn tại.";
            }
            
        }

        void ftp_DownloadCompleted(object sender, System.Net.DownloadDataCompletedEventArgs e)
        {
            lblMessage.Text = "Đã tải phiên bản mới xong";
            btnCheck.Enabled = false;
            proBar.Visible = false;
            btnUpdate.Enabled = true;
           // helper.ExtractFilesFromZip(Application.StartupPath + "\\update.zip", path, "");

            //throw new NotImplementedException();
        }

       
        

        void ftp_DownloadProgress(object sender, DownloadPercent e)
        {
            proBar.Visible = true;
            proBar.Value = e.Position;
            proBar.Update();
            //throw new NotImplementedException();
        }

        private void btnUpdate_Click_1(object sender, EventArgs e)
        {
            while (Program.IsApplicationAlreadyRunning())
            {
                if (MessageBox.Show("Chương trình Quản Lý Thiết Bị đang chạy.\nVui lòng tắt nó trước khi cập nhật!", "Cập nhật", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Cancel)
                    return;
            }

            lblMessage.Text = "Đang cập nhật...";
            btnUpdate.Enabled = false;
            ZipHelper helper = new ZipHelper();
            helper.UnzipProcess += helper_UnzipProcess;
            helper.UnzipComplete += helper_UnzipComplete;
            helper.UnzipFail += helper_UnzipFail;
            helper.ExtractFileChanged += helper_ExtractFileChanged;
            helper.Extract(Application.StartupPath + "\\update.zip", Application.StartupPath);
        }

        void helper_ExtractFileChanged(object sender, ExtractFileChangedEventArg e)
        {
            lblMessage.Text = "Đang giải nén " + e.ZEntry.Name;
            lblMessage.Update();
        }

        void helper_UnzipComplete(object sender, EventArgs e)
        {
            lblMessage.Text = "Cập nhật thành công";
            btnUpdate.Enabled = false;
            proBar.Visible = false;
        }

        void helper_UnzipFail(object sender, string Message)
        {
            //throw new NotImplementedException();
            //throw new NotImplementedException();
            lblMessage.Text = Message;
            btnUpdate.Enabled = true;
            proBar.Visible = false;
        }

        void helper_UnzipProcess(object sender, int position)
        {
            proBar.Visible = true;
            proBar.Value = position;
            proBar.Update();
            //throw new NotImplementedException();
        }
    }
}
